package leetcode;

// 模拟外观数列

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class problems_038 {

    public static void main(String[] arge){
        new Solution().countAndSay(5);
    }
    static class Solution {
        public String countAndSay(int n) {
            String str = "1";
            System.out.println(str);
            for (int i = 2; i <= n; i++) {
                str = getNext(str);
                System.out.println(str);
            }
            return str;
        }
        public String getNext(String last) {
            List<Character> listkey = new ArrayList<>();
            List<Integer> listValue = new ArrayList<>();

            for (int i = 0; i < last.length(); i++) {
                Character c = last.charAt(i);
                int index = listkey.size()-1;
                if(listkey.isEmpty() || listkey.get(index) != c){
                    listkey.add(c);
                    listValue.add(1);
                }else {
                    listValue.set(index, listValue.get(index) + 1);
                }
            }
            StringBuffer ret = new StringBuffer();
            for (int i = 0; i < listkey.size(); i++) {
                ret.append(listValue.get(i));
                ret.append(listkey.get(i));
            }
            return ret.toString();
        }
    }
}
